1.3 Dart AOT 模式

Dart 支持 AOT 编译运行,在 AOT(Ahead-of-Time)模式下,Dart VM 不支持动态加载/解析/编译 Dart 源代码。它只支持加载和执行预编译的机器码。

对 Dart AOT 模式理解的一个难点,在于 AOT 模式也是需要依赖 Dart VM 的


JIT、AOT 都需要 DartVM

JIT 需要 DartVM 比较好理解,就像 Java 与 JVM 一样,Java 字节码需要在 JVM 内才能运行。

比较难以理解的一点,是 AOT 也需要 DartVM。AOT 不是都编译成机器码了吗?怎么还需要虚拟机呢?

造成理解困难的关键在与 DartVM 的命名上。DartVM 是可裁剪的。DartVM 由多个组件组成,包括运行时系统(对象模型、垃圾回收、快照……)、JIT 管道、AOT 管道、解释器等。

在 AOT 模式下,所需要的是一个最精简的 DartVM 裁剪版本,只提供最基础的垃圾回收和核心库等。相当于 JIT 下 DartVM 的功能子集

因此,JIT 下需要全功能的 DartVM,AOT 下需要精简 DartVM。



编译时的 Dart VM 依赖

AOT 模式的预编译机器码从哪里来?当您在发布模式下构建应用程序时,此代码是由 Dart VM 的一种特殊模式生成的。

因此,VM 不仅在运行时起作用,而且甚至在程序执行之前也充当简单的编译器。


本文作者:Maeiee

本文链接:1.3 Dart AOT 模式

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!